package br.com.virtual.cadastrar.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.NoResultException;

import br.com.virtual.base.dao.impl.BaseDaoImpl;
import br.com.virtual.cadastrar.dao.PessoaJuridicaDAO;
import br.com.virtual.cadastrar.model.PessoaJuridica;

public class PessoaJuridicaDAOImpl extends BaseDaoImpl implements
		PessoaJuridicaDAO {

	@Override
	public PessoaJuridica create(PessoaJuridica pessoaJuridica) {

		getManager().persist(pessoaJuridica);
		return pessoaJuridica;
	}

	@Override
	public PessoaJuridica read(Long id) {
		return getManager().find(PessoaJuridica.class, id);
	}

	@Override
	public void update(PessoaJuridica pessoaJuridica) {
		getManager().merge(pessoaJuridica);
	}

	@Override
	public void delete(PessoaJuridica pessoaJuridica) {
		getManager().remove(read(pessoaJuridica.getId()));
	}

	@Override
	public List<PessoaJuridica> getList() {
		return this.list();
	}

	private List<PessoaJuridica> list() {
		return new ArrayList<PessoaJuridica>(getManager().createQuery(
				"from PessoaJuridica p ", PessoaJuridica.class).getResultList());
	}

	@Override
	public PessoaJuridica findByCNPJ(String cnpj) {
		try {

			return getManager()
					.createQuery("from PessoaJuridica p where p.cnpj = :cnpj",
							PessoaJuridica.class).setParameter("cnpj", cnpj)
					.getSingleResult();
		} catch (NoResultException n) {
			return null;
		}
	}
}
